package cn.tedu.micro.demo.es.repository;

import cn.tedu.micro.demo.es.po.StudentEsPO;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.data.geo.Distance;

import java.util.Date;
import java.util.List;

/**
 * 回顾mybatis-plus做法
 * 继承baseMapper
 * 提供对应持久化类的泛型,帮助底层实现对应sql的拼接
 * 继承ElasticsearchRepository
 * 提供泛型 document(文档对应po) key(每个文档的id字段类型)
 */
public interface StudentEsRepository extends ElasticsearchRepository<StudentEsPO,String> {
    //1.派生方法 案例1: 传递一个学生名称,查询学生PO对象
    List<StudentEsPO> getByName(String name);
    //2.派生方法 案例2: 传递学生姓名,和学生年龄,有一个满足就命中
    List<StudentEsPO> getByNameOrAge(String name,Integer age);
    //3.派生方法 案例3: 传递学生姓名,和学生年龄,年龄必须小于传参
    List<StudentEsPO> getByNameOrAgeLessThan(String name,Integer age);
    //4.派生方法 案例4: 传递一组id值,查询学生
    List<StudentEsPO> getByIdIn(List<String> ids);
    //5.派生方法 案例5: 传递一个时间段start,end,查询生日范围
    List<StudentEsPO> getByBirthdayBetween(Date start, Date end);
    //6.派生方法 案例6: 传递年龄小于这个范围的返回,并且按照生日倒序输出
    List<StudentEsPO> getByAgeLessThanOrderByBirthdayDesc(Integer age);
    //7.派生方法 案例7: 传递中心点和半径,使用geoPoint查询附近范围学生
    List<StudentEsPO> getByLocationWithin(GeoPoint center, Distance distance);
}
